﻿/// <summary>
/// FileName: CustomFunctions.cs
/// Author: Jiang Xiaolong
/// Created Time: 2015.05.12
/// Version: 1.0
/// Company: Sunnytech
/// Function: 自定义数学函数集合，在程序启动时，应该定义的相关数学函数加入到该集合中，现在如果新增一个函数，除了需要扩展ICustomFunction接口外，还需要在CustomFunctions手动添加一句，把function_id和具体函数实例关联起来，应为添加还比较方便，暂时就不弄成反射的形式了；
///
/// Changed By:
/// Modification Time:
/// Discription:
/// </summary>
using System;
using System.Collections.Generic;
using Expression.api;

namespace Expression.impl
{
	/// <summary>
	/// 自定义函数集合；
	/// </summary>
	public class CustomFunctions
	{
		//函数实例映射
		private static Dictionary<string, ICustomFunction> _functionDic = new Dictionary<string, ICustomFunction>();

		/// <summary>
		/// 手动初始化函数集合，在新增一个函数时，都需要在程序启动时调用一下这个函数；
		/// </summary>
		/// <param name="function_id">函数对应ID；</param>
		/// <param name="function">数学函数实例；</param>
		public static void Add(string function_id, ICustomFunction function)
		{
			if (!_functionDic.ContainsKey(function_id.ToLower()))
			{
				_functionDic.Add(function_id.ToLower(), function);
			}
		}

		/// <summary>
		/// 当前函数ID是否有效；
		/// </summary>
		/// <param name="function_id">函数ID；</param>
		/// <returns>是否有效；</returns>
		public static bool IsValid(string function_id)
		{
			if (_functionDic.ContainsKey(function_id.ToLower()))
			{
				return true;
			}
			else
			{
				return false;
			}
		}

		/// <summary>
		/// 根据函数ID，返回相应函数实例；
		/// </summary>
		/// <param name="function_id">函数ID；</param>
		/// <returns>具体函数实例；</returns>
		public static ICustomFunction Find(string function_id)
		{
			if (_functionDic.ContainsKey(function_id.ToLower()))
			{
				return _functionDic[function_id.ToLower()];
			}
			else
			{
				return null;
			}
		}

	}
}